package com.xm.lock.happy;

import lombok.Getter;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * CAS（Compare-And-Swap） √
 * 原理：
 *   CAS 是一种无锁算法，通过硬件指令实现原子操作。
 *   Java 中的 Atomic 类（如 AtomicInteger、AtomicReference）就是基于 CAS 实现的。
 * 特点：
 *   无锁，性能高。
 *   适用于高并发场景，但可能产生 ABA 问题。
 * 拓展：ABA解决方案：
 *   1、加版本号（每次更新版本号加一） AtomicStampedReference
 *   2、加状态（每次操作更新状态标识为true 默认false） AtomicMarkableReference
 */
public class TestCAS01 {
    @Getter
    private final AtomicInteger count = new AtomicInteger(0);

    // 主要是通过do {} while(unsafe.compareAndSwap())自旋式 + volatie 关键字的方法实现原子性（可见性）操作
    public void increment() {
        count.incrementAndGet();// CAS操作
    }
}
